package cn.com.dcsgo.feign;

import cn.com.dcsgo.feign.fallback.ProductFeignClientFallback;
import cn.com.dcsgo.product.bean.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * FeignInterface
 * OpenFeign远程调用
 * 在接口上使用 FeignClient 注解通过 value或name 属性指定服务名称
 * 默认使用轮询负载均衡算法
 * fallback 属性指定兜底策略(实现类)
 *
 * @author Dcsgo
 * @since 2025/3/15 14:06
 */
@FeignClient(value = "service-product", fallback = ProductFeignClientFallback.class)
public interface ProductFeignClient {
    /**
     * 复用 Spring MVC 的注解进行HTTP请求
     * RPC 和 原来的 SpringMVC 是逆过程
     * 之前是路径传参，现在是将方法参数传递给路径参数
     *
     * @param id id
     * @return Product
     */
    @GetMapping("product/{id}")
    Product getProductById(@PathVariable("id") Long id);
}
